<?php
	header("Content-Type:text/html;charset= utf-8");//设置编码格式
	class UpFile {
	var $uploadFolder = "upload";//附件存放点
	var $originalFolder = "original";//原始图片存放文件夹
	var $bigFolder = "big";//处理后的大图片存放路径，注：必须是放在 $uploadFolder下的子目录
	var $smallFolder = "small";//缩略图存放路径，注：必须是放在 $uploadFolder下的子目录
	var $markFolder = "mark";//处理后水印大图片存放处
	var $smallmarkFolder = "smark";//水印小图片存放处

	var $upFileType = "jpg gif png JPG GIF PNG Jpg jPG";//上传的类型，默认为：jpg gif png rar zip
	var $upFileMax = 10240;//上传大小限制，单位是“KB”，默认为：1024KB
	var $fontType = "upload/04B_08__.TTF";//字体
	var $maxWidth = 696; //图片最大宽度
	var $maxHeight = 696; //图片最大高度

	/**
	 * 构造函数
	 */
	function UpFile($uploadFolder = "upload") {
		$this->uploadFolder = "..".DIRECTORY_SEPARATOR.$uploadFolder;
		$this->fontType = "font".DIRECTORY_SEPARATOR."/04B_08__.TTF";
	}
	/**
	 * 上传原始文件[包括图片]
	 */
	function upLoad($inputName) {
		$imageName = time();//设定当前时间为图片名称
		if(@empty($_FILES[$inputName]["name"])) die("没有上传文件信息，请确认！");
		$name = explode(".",$_FILES[$inputName]["name"]);//将上传前的文件以“.”分开取得文件类型
		$imgCount = count($name);//获得截取的数量
		$imgType = $name[$imgCount-1];//取得文件的类型
		if(strpos($this->upFileType,$imgType) === false) die(error("上传文件类型仅支持 ".$this->upFileType." 不支持 ".$imgType));
		$filename = $imageName.".".$imgType;//写入数据库的文件名
		$uploadFile = $this->uploadFolder.DIRECTORY_SEPARATOR."original".DIRECTORY_SEPARATOR.$filename;//上传后的文件名称
		//echo "--1-".$_FILES[$inputName]["tmp_name"];
		
		//echo "--2-".$uploadFile;
		$upFileok = move_uploaded_file($_FILES[$inputName]["tmp_name"],$uploadFile);
		if($upFileok) {
			$imgSize = $_FILES[$inputName]["size"];
			$kSize = round($imgSize/1024);
			if($kSize > ($this->upFileMax*1024)) {
				@unlink($uploadFile);
				die(error("上传文件超过 ".$this->upFileMax."KB"));
			}
		} else {
			die(error("上文件失败，请确认你的上传文件不超过 $upFileMax KB 或上传时间超时"));
		}
		return $filename;
	}


	/**
	 * 保存处理后的大图片
	 */
	function saveBigImg($photo) {
		$imgInfo = $this->getInfo($photo);
		$photo = $this->uploadFolder.DIRECTORY_SEPARATOR."original".DIRECTORY_SEPARATOR.$photo;//获得图片源
		//$newName = substr($imgInfo["name"],0,strrpos($imgInfo["name"], "."))."_big.jpg";//新图片名称
		$newName = $imgInfo["name"];//新图片名称
		if($imgInfo["type"] == 1) {
			$img =  imagecreatefromgif($photo);
		} elseif($imgInfo["type"] == 2) {
			$img =  imagecreatefromjpeg($photo);
		} elseif($imgInfo["type"] == 3) {
			$img =  imagecreatefrompng($photo);
		} else {
			$img ="";
		}
		if(empty($img)) return False;
		$width = ($this->maxWidth > $imgInfo["width"]) ? $imgInfo["width"] : $this->maxWidth;
		$height = ($this->maxHeight > $imgInfo["height"]) ? $imgInfo["height"] : $this->maxHeight;

		$srcW = $imgInfo["width"];
		$srcH = $imgInfo["height"];
		if ($srcW * $width > $srcH * $height) {
			$height = round($srcH * $width / $srcW);
		} else {
			$width = round($srcW * $height / $srcH);
		}
		if (function_exists("imagecreatetruecolor")) {
			$newImg = imagecreatetruecolor($width, $height);
			ImageCopyResampled($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
		} else {
			$newImg = imagecreate($width, $height);
			ImageCopyResized($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
		}
		
		
		
		if ($this->toFile) {
			if (file_exists($this->uploadFolder.DIRECTORY_SEPARATOR.$this->bigFolder.DIRECTORY_SEPARATOR.$newName))
				@unlink($this->uploadFolder.DIRECTORY_SEPARATOR.$this->bigFolder.DIRECTORY_SEPARATOR.$newName);
			ImageJPEG($newImg,$this->uploadFolder.DIRECTORY_SEPARATOR.$this->bigFolder.DIRECTORY_SEPARATOR.$newName);
			return $this->uploadFolder.DIRECTORY_SEPARATOR.$this->bigFolder.DIRECTORY_SEPARATOR.$newName;
		} else {
			ImageJPEG($newImg);
		}
		ImageDestroy($newImg);
		ImageDestroy($img);
		return $newName;
	}
	/**
	 * 保存处理后的小图片
	 */
	function saveSmallImg($photo,$width=128,$height=128) {
		$imgInfo = $this->getInfo($photo);
		$photo = $this->uploadFolder.DIRECTORY_SEPARATOR."original".DIRECTORY_SEPARATOR.$photo;//获得图片源
		$newName = $imgInfo["name"];//新图片名称
		if($imgInfo["type"] == 1) {
			$img = imagecreatefromgif($photo);
		} elseif($imgInfo["type"] == 2) {
			$img = imagecreatefromjpeg($photo);
		} elseif($imgInfo["type"] == 3) {
			$img = imagecreatefrompng($photo);
		} else {
			$img = "";
		}
		if(empty($img)) return False;
		$width = ($width > $imgInfo["width"]) ? $imgInfo["width"] : $width;
		$height = ($height > $imgInfo["height"]) ? $imgInfo["height"] : $height;
		$srcW = $imgInfo["width"];
		$srcH = $imgInfo["height"];
		if ($srcW * $width > $srcH * $height) {
			$height = round($srcH * $width / $srcW);
		} else {
			$width = round($srcW * $height / $srcH);
		}
		if (function_exists("imagecreatetruecolor")) {
			$newImg = imagecreatetruecolor($width, $height);
			ImageCopyResampled($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
		} else {
			$newImg = imagecreate($width, $height);
			ImageCopyResized($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
		}
		if ($this->toFile) {
			if (file_exists($this->uploadFolder.DIRECTORY_SEPARATOR.$this->smallFolder.DIRECTORY_SEPARATOR.$newName))
				@unlink($this->uploadFolder.DIRECTORY_SEPARATOR.$this->smallFolder.DIRECTORY_SEPARATOR.$newName);
			ImageJPEG($newImg,$this->uploadFolder.DIRECTORY_SEPARATOR.$this->smallFolder.DIRECTORY_SEPARATOR.$newName);
			return $this->uploadFolder.DIRECTORY_SEPARATOR.$this->smallFolder.DIRECTORY_SEPARATOR.$newName;
		} else {
			ImageJPEG($newImg);
		}
		ImageDestroy($newImg);
		ImageDestroy($img);
		return $newName;
	}

	/**
	 * 保存原始水印图片
	 */
	function saveMarkImg($photo,$text) {
		$imgInfo = $this->getInfo($photo);
		$photo = $this->uploadFolder.DIRECTORY_SEPARATOR.$photo;
		$newName = substr($imgInfo["name"], 0, strrpos($imgInfo["name"], ".")) . "_mark.jpg";
		switch ($imgInfo["type"]) {
		case 1:
			$img = imagecreatefromgif($photo);
		break;
		case 2:
			$img = imagecreatefromjpeg($photo);
		break;
		case 3:
			$img = imagecreatefrompng($photo);
		break;
		default:
		return False;
		}
		if (empty($img)) return False;
		$width = ($this->maxWidth > $imgInfo["width"]) ? $imgInfo["width"] : $this->maxWidth;
		$height = ($this->maxHeight > $imgInfo["height"]) ? $imgInfo["height"] : $this->maxHeight;
		$srcW = $imgInfo["width"];
		$srcH = $imgInfo["height"];
		if ($srcW * $width > $srcH * $height) {
			$height = round($srcH * $width / $srcW);
		} else {
			$width = round($srcW * $height / $srcH);
		}
		if (function_exists("imagecreatetruecolor")) {
			$newImg = imagecreatetruecolor($width, $height);
			ImageCopyResampled($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
		} else {
			$newImg = imagecreate($width, $height);
			ImageCopyResized($newImg, $img, 0, 0, 0, 0, $width, $height, $imgInfo["width"], $imgInfo["height"]);
		}

		$white = imageColorAllocate($newImg, 255, 255, 255);
		$black = imageColorAllocate($newImg, 0, 0, 0);
		$alpha = imageColorAllocateAlpha($newImg, 230, 230, 230, 40);
		ImageFilledRectangle($newImg, 0, $height-26, $width, $height, $alpha);
		ImageFilledRectangle($newImg, 13, $height-20, 15, $height-7, $black);
		ImageTTFText($newImg, 4.9, 0, 20, $height-14, $black, $this->fontType, $text[0]);
		ImageTTFText($newImg, 4.9, 0, 20, $height-6, $black, $this->fontType, $text[1]);
		if($this->toFile) {
			if (file_exists($this->uploadFolder.DIRECTORY_SEPARATOR.$this->markFolder.DIRECTORY_SEPARATOR.$newName))
				@unlink($this->uploadFolder.DIRECTORY_SEPARATOR.$this->markFolder.DIRECTORY_SEPARATOR.$newName);
			ImageJPEG($newImg,$this->uploadFolder.DIRECTORY_SEPARATOR.$this->markFolder.DIRECTORY_SEPARATOR.$newName);
			return $this->uploadFolder.DIRECTORY_SEPARATOR.$this->markFolder.DIRECTORY_SEPARATOR.$newName;
		} else {
			ImageJPEG($newImg);
		}
		ImageDestroy($newImg);
		ImageDestroy($img);
		return $newName;
	}
	/**
	 * 根据路径 获取 图片信息
	 */
	function getInfo($photo) {
		$photo = $this->uploadFolder.DIRECTORY_SEPARATOR."original".DIRECTORY_SEPARATOR.$photo;
		$imageInfo = getimagesize($photo);
		$imgInfo["width"] = $imageInfo[0];
		$imgInfo["height"] = $imageInfo[1];
		$imgInfo["type"] = $imageInfo[2];
		$imgInfo["name"] = basename($photo);
		return $imgInfo;
	}
}
?>